#!/bin/bash
# 功能：1条命令部署 Grafana + Prometheus + Node Exporter（含仪表板自动加载）
# 使用方法：./deploy.sh 新设备IP 新设备登录用户名（需有 sudo 权限）
# 示例：./deploy.sh 192.168.1.100 root

# ====================== 基础参数配置（仅需修改这里，其他无需动）======================
# 1. 新设备信息（通过命令行参数传入，无需手动改）
SERVER_IP=$1          # 第1个参数：新设备IP
USER=$2               # 第2个参数：新设备登录用户名
# 2. 组件版本（可按需替换，建议用稳定版）
PROMETHEUS_VERSION="2.45.0"    # Prometheus 版本
NODE_EXPORTER_VERSION="1.6.1"  # Node Exporter 版本
# 3. 本地配置文件路径（与你迁移后的目录一致）
LOCAL_GRAFANA_DASHBOARD_JSON="./grafana/dashboards/node-exporter.json"          # 仪表板JSON
LOCAL_GRAFANA_PROVISIONING_YML="./grafana/provisioning/dashboards/dashboard-provisioning.yml"  # 仪表板加载配置
LOCAL_GRAFANA_ORG_YML="./grafana/provisioning/organizations/org-provisioning.yml"  # 默认首页配置
LOCAL_PROMETHEUS_YML="./prometheus/prometheus.yml"                              # Prometheus配置
LOCAL_NODE_EXPORTER_SERVICE="./prometheus/node_exporter.service"                # Node Exporter服务配置
# 4. 新设备目标路径（与组件安装目录一致，无需改）
REMOTE_GRAFANA_DASHBOARD_DIR="/var/lib/grafana/dashboards"
REMOTE_GRAFANA_PROVISIONING_DIR="/etc/grafana/provisioning/dashboards"
REMOTE_GRAFANA_ORG_DIR="/etc/grafana/provisioning/organizations"
REMOTE_PROMETHEUS_DIR="/usr/local/prometheus"
REMOTE_NODE_EXPORTER_SERVICE_PATH="/etc/systemd/system/node_exporter.service"
REMOTE_PROMETHEUS_SERVICE_PATH="/etc/systemd/system/prometheus.service"

# ====================== 第一步：参数检查（确保输入正确）======================
if [ $# -ne 2 ]; then
  echo "❌ 错误：参数不足！"
  echo "✅ 正确用法：./deploy.sh 新设备IP 新设备用户名"
  echo "✅ 示例：./deploy.sh 192.168.1.100 root"
  exit 1
fi

# 检查本地配置文件是否存在（避免拷贝空文件）
if [ ! -f "$LOCAL_GRAFANA_DASHBOARD_JSON" ]; then echo "❌ 找不到仪表板JSON：$LOCAL_GRAFANA_DASHBOARD_JSON"; exit 1; fi
if [ ! -f "$LOCAL_GRAFANA_PROVISIONING_YML" ]; then echo "❌ 找不到仪表板加载配置：$LOCAL_GRAFANA_PROVISIONING_YML"; exit 1; fi
if [ ! -f "$LOCAL_GRAFANA_ORG_YML" ]; then echo "❌ 找不到默认首页配置：$LOCAL_GRAFANA_ORG_YML"; exit 1; fi
if [ ! -f "$LOCAL_PROMETHEUS_YML" ]; then echo "❌ 找不到Prometheus配置：$LOCAL_PROMETHEUS_YML"; exit 1; fi
if [ ! -f "$LOCAL_NODE_EXPORTER_SERVICE" ]; then echo "❌ 找不到Node Exporter服务配置：$LOCAL_NODE_EXPORTER_SERVICE"; exit 1; fi

echo "✅ 本地配置文件检查完成，开始部署到 $SERVER_IP"


# ====================== 第二步：部署 Grafana（含仪表板自动加载）======================
echo -e "\n===== 1. 部署 Grafana ====="
# 1. 新设备创建Grafana目录
ssh $USER@$SERVER_IP "sudo mkdir -p $REMOTE_GRAFANA_DASHBOARD_DIR $REMOTE_GRAFANA_PROVISIONING_DIR $REMOTE_GRAFANA_ORG_DIR"
# 2. 拷贝Grafana配置文件到新设备
echo "🔄 正在拷贝仪表板JSON..."
scp "$LOCAL_GRAFANA_DASHBOARD_JSON" "$USER@$SERVER_IP:$REMOTE_GRAFANA_DASHBOARD_DIR/"
echo "🔄 正在拷贝仪表板加载配置..."
scp "$LOCAL_GRAFANA_PROVISIONING_YML" "$USER@$SERVER_IP:$REMOTE_GRAFANA_PROVISIONING_DIR/"
echo "🔄 正在拷贝默认首页配置..."
scp "$LOCAL_GRAFANA_ORG_YML" "$USER@$SERVER_IP:$REMOTE_GRAFANA_ORG_DIR/"
# 3. 修复Grafana文件权限（确保grafana用户能读取）
ssh $USER@$SERVER_IP "sudo chown -R grafana:grafana $REMOTE_GRAFANA_DASHBOARD_DIR $REMOTE_GRAFANA_PROVISIONING_DIR $REMOTE_GRAFANA_ORG_DIR"
ssh $USER@$SERVER_IP "sudo chmod -R 644 $REMOTE_GRAFANA_PROVISIONING_DIR/*.yml $REMOTE_GRAFANA_ORG_DIR/*.yml $REMOTE_GRAFANA_DASHBOARD_DIR/*.json"
# 4. 重启Grafana服务（使配置生效）
ssh $USER@$SERVER_IP "sudo systemctl restart grafana-server"
# 5. 验证Grafana状态
if ssh $USER@$SERVER_IP "sudo systemctl is-active --quiet grafana-server"; then
  echo "✅ Grafana 部署成功！访问地址：http://$SERVER_IP:3000"
else
  echo "❌ Grafana 部署失败，请登录新设备查看日志：sudo journalctl -u grafana-server -n 50"
  exit 1
fi


# ====================== 第三步：部署 Prometheus =======================
echo -e "\n===== 2. 部署 Prometheus ====="
# 1. 新设备创建Prometheus目录
ssh $USER@$SERVER_IP "sudo mkdir -p $REMOTE_PROMETHEUS_DIR"
# 2. 下载并解压Prometheus到新设备
echo "🔄 正在新设备下载Prometheus..."
ssh $USER@$SERVER_IP "cd $REMOTE_PROMETHEUS_DIR && sudo wget -q https://github.com/prometheus/prometheus/releases/download/v$PROMETHEUS_VERSION/prometheus-$PROMETHEUS_VERSION.linux-amd64.tar.gz"
ssh $USER@$SERVER_IP "cd $REMOTE_PROMETHEUS_DIR && sudo tar -zxf prometheus-$PROMETHEUS_VERSION.linux-amd64.tar.gz --strip-components 1 && sudo rm -f prometheus-$PROMETHEUS_VERSION.linux-amd64.tar.gz"
# 3. 拷贝Prometheus配置文件到新设备
echo "🔄 正在拷贝Prometheus配置..."
scp "$LOCAL_PROMETHEUS_YML" "$USER@$SERVER_IP:$REMOTE_PROMETHEUS_DIR/"
# 4. 创建Prometheus系统服务（支持开机自启）
echo "🔄 正在配置Prometheus服务..."
ssh $USER@$SERVER_IP "sudo cat > $REMOTE_PROMETHEUS_SERVICE_PATH << EOF
[Unit]
Description=Prometheus Monitoring System
After=network.target

[Service]
User=root
Group=root
Type=simple
ExecStart=$REMOTE_PROMETHEUS_DIR/prometheus --config.file=$REMOTE_PROMETHEUS_DIR/prometheus.yml
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF"
# 5. 启动Prometheus并设置开机自启
ssh $USER@$SERVER_IP "sudo systemctl daemon-reload && sudo systemctl start prometheus && sudo systemctl enable prometheus"
# 6. 验证Prometheus状态
if ssh $USER@$SERVER_IP "sudo systemctl is-active --quiet prometheus"; then
  echo "✅ Prometheus 部署成功！访问地址：http://$SERVER_IP:9090"
else
  echo "❌ Prometheus 部署失败，请登录新设备查看日志：sudo journalctl -u prometheus -n 50"
  exit 1
fi


# ====================== 第四步：部署 Node Exporter =======================
echo -e "\n===== 3. 部署 Node Exporter ====="
# 1. 下载并解压Node Exporter到新设备
echo "🔄 正在新设备下载Node Exporter..."
ssh $USER@$SERVER_IP "cd $REMOTE_PROMETHEUS_DIR && sudo wget -q https://github.com/prometheus/node_exporter/releases/download/v$NODE_EXPORTER_VERSION/node_exporter-$NODE_EXPORTER_VERSION.linux-amd64.tar.gz"
ssh $USER@$SERVER_IP "cd $REMOTE_PROMETHEUS_DIR && sudo tar -zxf node_exporter-$NODE_EXPORTER_VERSION.linux-amd64.tar.gz --strip-components 1 && sudo rm -f node_exporter-$NODE_EXPORTER_VERSION.linux-amd64.tar.gz"
# 2. 拷贝Node Exporter服务配置到新设备
echo "🔄 正在拷贝Node Exporter服务配置..."
scp "$LOCAL_NODE_EXPORTER_SERVICE" "$USER@$SERVER_IP:$REMOTE_NODE_EXPORTER_SERVICE_PATH"
# 3. 启动Node Exporter并设置开机自启
ssh $USER@$SERVER_IP "sudo systemctl daemon-reload && sudo systemctl start node_exporter && sudo systemctl enable node_exporter"
# 4. 验证Node Exporter状态
if ssh $USER@$SERVER_IP "sudo systemctl is-active --quiet node_exporter"; then
  echo "✅ Node Exporter 部署成功！访问地址：http://$SERVER_IP:9100/metrics"
else
  echo "❌ Node Exporter 部署失败，请登录新设备查看日志：sudo journalctl -u node_exporter -n 50"
  exit 1
fi


# ====================== 第五步：部署完成 =======================
echo -e "\n🎉 所有组件部署完成！"
echo "📋 组件访问地址："
echo "   - Grafana（监控可视化）：http://$SERVER_IP:3000"
echo "   - Prometheus（数据存储）：http://$SERVER_IP:9090"
echo "   - Node Exporter（数据采集）：http://$SERVER_IP:9100/metrics"
echo "💡 下一步：登录Grafana，添加Prometheus数据源（URL：http://localhost:9090），即可查看仪表板数据"
